javascript创建对象简单的说,无非就是使用内置对象或各种自定义对象,当然还可以用JSON;方法很多,也能混合使用。
-
对象字面量的方式:
var person={ name:"SF", age:25 say:function(){ alert(this.name+"今年"+this.age); } }; person.say();
-
创建Object实例:
var my = new Object(); my.name = "SF"; //JavaScript的发明者 my.age = 25; my.say = function() { alert("我是"+this.name+"今年"+my.age); } my.say();
*属性是可以动态添加,修改的
-
构造函数
-
无参构造函数
function Person(){} var person = new Person(); person.name = "SF"; person.age = "25"; person.say = function() { alert("My name is " + person.name); } person.say();
-
有参构造函数
function Person(name,age) { this.name = name; this.age = age; this.say = function() { alert("我叫" + this.name + ",今年" + this.age + "岁); } } var my = new Person("SF",25); //实例化、创建对象 my.say(); //调用say()方法
由于this指针在对象实例的时候发生改变指向新的实例。这时新实例的方法也要重新创建,如果n个实例就要n次重建相同的方法。
-
-
工厂模式
function creatPerson(name,age){ var person = new Object(); person.name=name; person.age=age; person.say=function(){ alert(this.name+"今年"+this.age+"岁"); }; return person; }; var my = creatPerson('SF',25);//实例化 my.say();//调用
-
原型方式
function Person(name,age){} Person.prototype.name = "SF"; Person.prototype.age = 25; Person.prototype.say = function() { alert(this.name+"是我的名字"); } var my = new Person(); my.say();
让我们先了解下原型:
首先,每个函数都有一个prototype(原型)属性,这个指针指向的就是Person.prototype对象。而这个原型对象在默认的时候有一个属性constructor,指向Person,这个属性可读可写。而当我们在实例化一个对象的时候,实例my除了具有构造函数定义的属性和方法外(注意,只是构造函数中的),还有一个指向构造函数的原型的指针,ECMAScript中叫[[prototype]],这样实例化对象的时候,原型对象的方法并没有在某个具体的实例中,因为原型没有被实例。所以这种模式定义的对象,在调用方法的时候过程:调用my.say();先看实例中有没有,有调之,无追踪到原型,有调之,无出错,调用失败。
上面代码等同
function Person(name,age){} Person.prototype={ constructor:Person, //必须手动设置这个属性,否则没有实例共享原型的意义了。 name:"SF", age:25, say:function(){ alert(this.name+"是我的名字"); } } var my = new Person(); my.say();
-
混合方式 (构造函数+原型)
function Person(name,age) { this.name = name; this.age = age; } Person.prototype.say = function() { alert("我是"+this.name+",今年"+this.age); } var my = new Person("SF","25"); my.say();
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。